<!--
 * @Description: 
 * @Author: xiongkuobiao
 * @Date: 2023-02-28 11:09:31
 * @LastEditors: xiongkuobiao
 * @LastEditTime: 2023-04-20 22:40:06
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button class="btn">点击</button>
    <script>
        function demo() {
            console.log(111);
        }
        let dom = document.querySelector(".btn")
        dom.onclick = fangdou(demo, 1000, false)

        function fangdou(fn, time, imm) {
            let timeout
            return function () {
                if (timeout) clearTimeout(timeout)
                if (imm) {
                    // 立即
                    if (!timeout) fn()
                    timeout = setTimeout(() => {
                        timeout = null
                    }, time);
                } else {
                    // 非立即
                    timeout = setTimeout(() => {
                        fn()
                    }, time)
                }
            }

        }


        // function fangdou(fn, time, imm) {
        //     let timeout
        //     return function () {
        //         if (timeout) clearTimeout(timeout)
        //         if (imm) {
        //             //  立即执行
        //             if (!timeout) fn()
        //             timeout = setTimeout(() => {
        //                 timeout = null
        //             }, time)
        //         } else {
        //             //  非立即执行
        //             timeout = setTimeout(() => {
        //                 fn()
        //             }, time)
        //         }
        //     }
        // }


        // function jieliu(fn, time, imm) {
        //     let timeout
        //     return function () {
        //         if (!timeout) {
        //             if (imm) {
        //                 fn()
        //                 timeout = setTimeout(() => {
        //                     timeout = null
        //                 }, time)
        //             } else {
        //                 timeout = setTimeout(() => {
        //                     fn()
        //                     timeout = null
        //                 }, time)
        //             }
        //         }
        //     }
        // }


    </script>



</body>

</html>